home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / util / libs / MultiReq.lha / MultiReq / C / include / libraries / multireq.h < prev   
C/C++ Source or Header  |  1992-11-12  |  14KB  |  390 lines

  1. /********************************************************/
  2. /*                            */
  3. /*  multireq.h -- definition of library structures    */
  4. /*                            */
  5. /*  Copyright (c) 1992 by Andreas Krebs            */
  6. /*                            */
  7. /********************************************************/
  8.  
  9. #ifndef    LIBRARIES_MULTIREQ_H
  10. #define    LIBRARIES_MULTIREQ_H
  11.  
  12. #ifndef    EXEC_TYPES_H
  13. #include <exec/types.h>
  14. #endif    /* EXEC_TYPES_H */
  15.  
  16. #ifndef    EXEC_LIBRARIES_H
  17. #include <exec/libraries.h>
  18. #endif    /* EXEC_LIBRARIES_H */
  19.  
  20. #ifndef    INTUITION_INTUITION_H
  21. #include <intuition/intuition.h>
  22. #endif    /* INTUITION_INTUITION_H */
  23.  
  24.     /* Defines for library */
  25.  
  26. #define MultiReqName    "multireq.library"
  27.  
  28.  
  29. /********************************/
  30. /*     data structures    */
  31. /********************************/
  32.  
  33.  
  34. /*********************************** FileList ***********************************/
  35. /*                                        */
  36. /* The FileList structure contains a complete Directory with all informations.    */
  37. /*                                        */
  38. /* The following structures contain some informations, that may never be    */
  39. /* changed by the user, and other informations, that can be changed.        */
  40. /* The structure elements mark with "CSU - Can be Set by User", can be set    */
  41. /* by the user, all others should NEVER be changed !!!                */
  42. /* All structure elements with the ending Buff are pointers to a already    */
  43. /* allocated string buffer, so do not change this pointers. Instead use        */
  44. /* StrCpy to fill this buffers with a string.                    */
  45. /*                                        */
  46. /********************************************************************************/
  47.  
  48. struct FileList
  49. {
  50.   APTR ListKey;                /* Key to mem for entries of list */
  51.  
  52.   struct FileEntry *FileList;        /* Ptr to first entry in list */
  53.   APTR FileListPos;            /* Current pos of ptr in list mem */
  54.   APTR FileListEnd;            /* end of list mem */
  55.  
  56.   struct FileEntry *FirstShown;        /* Ptr to first shown (not hidden !) entry in list */
  57.   struct FileEntry *FirstDisplayed;    /* Ptr to first displayed entry */
  58.   struct FileEntry *SelectedEntry;    /* Ptr to selected file */
  59.   APTR Lock;                /* filelock for list (if still reading or stopped) */
  60.   struct FileInfoBlock *FInfo;        /* ptr to FInfoBlock structure */
  61.   UBYTE *DrawerBuff;            /* Buffer containing the Drawer        [CSU] */
  62.   UWORD AutoRead;            /* automatically read in dir        [CSU] */
  63.   UWORD    DirNum;                /* Number of dirs read in */
  64.   UWORD FileNum;            /* Number of files read in */
  65. };
  66.  
  67. /*    possible flags for AutoRead    */
  68.  
  69. #define NO_AUTOREAD    0    /* don't read in dir automatically */
  70. #define DO_AUTOREAD    1    /* automatically read in dir, when filelist activated */
  71.  
  72.  
  73. /*************************** FileReq ****************************/
  74. /*                                */
  75. /*    The FileReq structure as returned from InitFileReq()     */
  76. /*                                */
  77. /****************************************************************/
  78.  
  79. struct FileReq
  80. {
  81.   UBYTE *TitleString;            /* ptr to title string or NULL (no title) [CSU] */
  82.   UBYTE *OkayString;            /* ptr to string for okay-gadget or NULL */
  83.                     /* ("Okay" used as text)        [CSU] */
  84.   UWORD LeftEdge;            /* leftedge of filereqwindow         [CSU] */
  85.   UWORD TopEdge;            /* topedge of filereqwindow         [CSU] */
  86.   UWORD Width;                /* width of window (NOT USED YET) */
  87.   UWORD Height;                /* height of window (NOT USED YET) */
  88.   APTR AddInfo;                /* additional info (NOT USED YET) */
  89.  
  90.   UBYTE *FileNameBuff;            /* when returning this buffer contains the */
  91.                     /* active filename with full path        */
  92.   UWORD    ReturnStatus;            /* MCD_OKAY, MCD_CANCEL, or stuff like that */
  93.   UBYTE ActiveList;            /* 0 (list 1) or 1 (list 2)         [CSU] */
  94.   UBYTE    ShowInfo;            /* show or hide ".info"-files         [CSU] */
  95.  
  96.   struct ReqBase *BaseAddress;        /* Base address of data memory (NEVER change !!!) */
  97.  
  98.   UBYTE *FileBuff;            /* buffer containing filename         [CSU] */
  99.   UBYTE *ShowBuff;            /* buffer with a wildcard string for the files */
  100.                     /* to be shown (e.g: "*.c|*.h")        [CSU] */
  101.   UBYTE *HideBuff;            /* buffer with wildcard string for the files */
  102.                     /* to be hidden                 [CSU] */
  103.   UWORD    FileListNum;            /* number of filelists (this version only */
  104.                     /* supports 2 filelists) */
  105.  
  106.   struct FileList FileList[2];        /* first and second filelist */
  107. };
  108.  
  109. /*    The possible ReturnStatus flags */
  110.  
  111. #define RET_ERROR    0    /* something went wrong, (no FilReq structure or */
  112.                 /* unable to open window) */
  113.  
  114. #define RET_CANCEL    1    /* Cancel-Gadget selected */
  115. #define RET_CLOSE    2    /* Close-Gadget selected */
  116. #define RET_FILE    3    /* RETURN pressed in File-Gadget */
  117. #define RET_DOUBLE    4    /* DoubleClick on File-Entry */
  118. #define RET_OKAY    5    /* Okay-Gadget selected */
  119.  
  120.  
  121. /*    The possible flags for ShowInfo */
  122.  
  123. #define HIDE_INFO    0    /* Hide all files ending with ".info" */
  124. #define SHOW_INFO    1    /* don't hide ".info" files */
  125.  
  126.  
  127. /********************************* MRText *******************************/
  128. /*                                    */
  129. /* The MRText structure, usefull if you have many texts of the same    */
  130. /* font and style, cause its shorter than IntuiText             */
  131. /*                                    */
  132. /************************************************************************/
  133.  
  134. struct MRText
  135. {
  136.   UWORD    LeftEdge;            /*left position of text */
  137.   UWORD    TopEdge;            /*top position of text */
  138.   UBYTE Pen;                /*FrontPen of text */
  139.   UBYTE    Length;                /*Length of text, avoids StrLen to be called */
  140.   UBYTE *Text;                /*ptr to text string */
  141. };
  142.  
  143.  
  144. /*********************************************************/
  145. /* the possible styles for the DrawGadgetBorder-function */
  146. /*********************************************************/
  147.  
  148. #define NOBORDER    0    /* draw no border */
  149. #define BOOLBORDER    1    /* draw a simple 3D-Button */
  150. #define FILLEDBORDER    2    /* draw a filled 3D-Button */
  151. #define STRBORDER    3    /* draw a StringGadget-Border */
  152. #define FILLEDSTRBORDER    4    /* draw a filled StringGadget-Border */
  153.  
  154. #define CYCLEIMG    0x80    /* draw a cycle image */
  155.  
  156. /********************************************************************************/
  157. /* The DrawGadgetBorder-function uses the UserData part of the Gadget structure    */
  158. /* for some additional information in the following way                */
  159. /* 1. Byte: Style, 2. Byte: Pen1, 3. Byte: Pen2, 4.Byte: FillPen (if used)    */
  160. /*                                        */
  161. /* The following MACRO helps you to set this value                */
  162. /********************************************************************************/
  163.  
  164. #define BORDER(s,p1,p2,f) (APTR)(((ULONG)s << 24) | ((ULONG)p1 << 16) | ((ULONG)p2 << 8) | (ULONG)f)
  165.  
  166.  
  167. /****************************** MultiReqBase ****************************/
  168. /*                                    */
  169. /*   the MultiReqBase structure is almost a normal LibBase structure     */
  170. /*                                    */
  171. /************************************************************************/
  172.  
  173. struct MultiReqBase
  174. {
  175.   struct Library LibNode;
  176.   UBYTE Flags;                /* some flags for lib */
  177.   UBYTE pad;                /* make EVEN address */
  178.  
  179.   APTR SegList;                /* bptr to first segement of library */
  180. };
  181.  
  182.  
  183. /************************************************************************/
  184. /*    All following structures are private ! DO NOT USE THEM !!!!    */
  185. /************************************************************************/
  186.  
  187. #ifdef    MULTIREQ_PRIVATE
  188.  
  189. /*    if you wish to use the following structures (????) add the following    */
  190. /*    command before #include <libraries/multireq.h>:                */
  191. /*    #define    MULTIREQ_PRIVATE
  192.  
  193.                 */
  194. /******************************** FileEntry *****************************/
  195. /*                                    */
  196. /*     The FileEntry-structure contains a file or directory.        */
  197. /*                                    */
  198. /************************************************************************/
  199.  
  200. struct FileEntry
  201. {
  202.   struct FileEntry *NextEntry;        /* Next entry in list */
  203.   struct FileEntry *LastEntry;        /* Last entry in list */
  204.   APTR ImageData;            /* or FileSize for files */
  205.   UBYTE Pen;                /* textcolor of entry (also as type ID) */
  206.   UBYTE Length;                /* length of name */
  207.   UBYTE *Name;                /* ptr to name */
  208.   UBYTE Shown;                /* entry hidden or shown ? */
  209.   UBYTE Selected;            /* 0 = Not Selected, 1 = Selected */
  210.   struct FileEntry *NextShown;        /* Next shown entry in list */
  211.   struct FileEntry *LastShown;        /* Last shown entry in list */
  212. };
  213.  
  214. /*    possible Pens */
  215.  
  216. #define FILE_PEN    1    /* entry is a file, so use pen 1 */
  217. #define DIR_PEN        2    /* entry is a directory, so use pen 2 */
  218.  
  219. /*    possible Shown flags */
  220.  
  221. #define ENTRY_HIDDEN    0    /* entry is not show in list */
  222. #define ENTRY_SHOWN    1    /* entry is shown in list */
  223.  
  224. /*    possible Selected flags */
  225.  
  226. #define ENTRY_UNSEL    0    /* entry is not selected */
  227. #define ENTRY_SEL    1    /* entry is selected */
  228.  
  229.  
  230. /******************************** VolEntry ******************************/
  231. /*                                    */
  232. /*     The VolEntry structure contains an entry of the volumes list.    */
  233. /*                                    */
  234. /************************************************************************/
  235.  
  236. struct VolEntry
  237. {
  238.   struct VolEntry *NextEntry;        /* next entry in list */
  239.   struct VolEntry *LastEntry;        /* last entry in list */
  240.   APTR ImageData;            /* ptr to imagedata of image to be displayed */
  241.   UBYTE Pen;                /* textcolor of entry (also type ID) */
  242.   UBYTE Length;                /* length of name */
  243.   UBYTE *Name;                /* ptr to name with an added ":" */
  244. };
  245.  
  246. /*    possible Pens */
  247.  
  248. #define DEVICE_PEN    1    /* pen for devices like (DF0:, ...) */
  249.                 /* pen for dirs (again 2) */
  250. #define VOLUME_PEN    3    /* pen for volumes */
  251.  
  252.  
  253. /***************************** MRTime ***************************/
  254. /*                                */
  255. /* The MRTime structure is needed to save the time of a message    */
  256. /*                                */
  257. /****************************************************************/
  258.  
  259. struct MRTime
  260. {
  261.   ULONG Seconds;        /* seconds part of the time */
  262.   ULONG Micros;            /* micros part of the time */
  263. };
  264.  
  265.  
  266. /************************************ ReqBase ***********************************/
  267. /*                                        */
  268. /* The ReqBase is NOT the LibraryBase of multireq.library, it's a structure     */
  269. /* containing all temporary information needed by the FileRequester         */
  270. /* This structure is create by InitFileReq and setup with the values, but     */
  271. /* because of it's size and it's important information, the user gets the     */
  272. /* FileReq structure instead of this one.                     */
  273. /*                                        */
  274. /********************************************************************************/
  275.  
  276. struct ReqBase
  277. {
  278.   APTR begSP;                /* initial SP of FileReq */
  279.   APTR readSP;                /* initial SP of ReadProcess */
  280.   struct Remember *ReqKey;        /* Key for AllocRemember */
  281.   struct Window *ReqWin;        /* ptr to FileReq-window */
  282.   struct RastPort *rp;            /* ptr to FileReq-window's RastPort */
  283.   struct FileReq *FileReq;        /* ptr to FileReq structure */
  284.   struct FileList *ActiveList;        /* ptr to currently active list (1 or 2) */
  285.  
  286.   struct MsgPort *ReqPort;        /* ptr to port of FileReq */
  287.   struct MsgPort *ReadPort;        /* ptr to port of ReadProcess */
  288.   struct ReadMessage *ReqMsg;        /* ptr to mem for FileReq messages */
  289.   struct ReadMessage *ReadMsg;        /* ptr to mem for ReadProcess messages */
  290.  
  291.   struct VolEntry CurrentVol;        /* mem for current dir vol entry (always first) */
  292.   struct VolEntry *VolList;             /* ptr to list with all volumes */
  293.   struct VolEntry *FirstVol;        /* first shown volume */
  294.   struct VolEntry *LastVol;        /* last shown volume */
  295.   UWORD    VolNum;                /* number of volumes in list */
  296.  
  297.   struct Remember *VolKey;        /* alloc key for volumes mem */
  298.   APTR VolListPos;            /* current pos in volumes mem */
  299.   APTR VolListEnd;            /* end of volumes mem */
  300.  
  301.   UWORD ShownNum;            /* number of files+dirs shown (not hidden!) */
  302.   UWORD SelectedPos;            /* pos of last selected entry (0 to 13) */
  303.   struct FileEntry *FirstFile;        /* first shown entry in display */
  304.   struct FileEntry *LastFile;        /* last shown entry in display */
  305.  
  306.   UBYTE *DrawerBuff;            /* ptr to enough mem to work with drawer buffer */
  307.   UBYTE *UndoDrawerBuff;        /* ptr to a undobuffer */
  308.   struct MRTime MsgTime;        /* for secs and micros of this message */
  309.   struct MRTime LastTime;        /* secs and micros of last message */
  310.  
  311.                     /* the following part contains all gadgets */
  312.  
  313.   struct Image FilePropImage;        /* the Image structures for the PropGadgets */
  314.   struct Image VolPropImage;
  315.  
  316.   struct StringInfo ShowSInfo;        /* the StringInfo structures for the String-Gadget */
  317.   struct StringInfo HideSInfo;
  318.   struct StringInfo DrawerSInfo;
  319.   struct StringInfo FileSInfo;
  320.  
  321.   struct PropInfo VolPInfo;        /* the PropInfo structures for the Prop-Gadgets */
  322.   struct PropInfo FilePInfo;
  323.  
  324.   struct Gadget CloseGadg;        /* the gadgets itself */
  325.   struct Gadget DepthGadg;
  326.   struct Gadget InfoGadg;
  327.   struct Gadget SwitchGadg;
  328.   struct Gadget Copy12Gadg;
  329.   struct Gadget Copy21Gadg;
  330.   struct Gadget ShowGadg;
  331.   struct Gadget HideGadg;
  332.   struct Gadget ScanGadg;
  333.   struct Gadget StopGadg;
  334.   struct Gadget OkayGadg;
  335.   struct Gadget CancelGadg;
  336.   struct Gadget DrawerGadg;
  337.   struct Gadget FileGadg;
  338.   struct Gadget VolUpGadg;
  339.   struct Gadget VolDownGadg;
  340.   struct Gadget VolPropGadg;
  341.   struct Gadget ParentGadg;
  342.   struct Gadget FileUpGadg;
  343.   struct Gadget FileDownGadg;
  344.   struct Gadget FilePropGadg;
  345.   struct Gadget DragGadg;
  346. };
  347.  
  348.  
  349. /********************************** ReadMessage *********************************/
  350. /*                                        */
  351. /*  The ReadMessage is used for communication between FileReq and ReadProcess.     */
  352. /*                                        */
  353. /********************************************************************************/
  354.  
  355. struct ReadMessage
  356. {
  357.   struct Node rdm_Node;
  358.   struct MsgPort *rdm_ReplyPort;
  359.   UWORD rdm_Length;            /*length is 10 */
  360.   UWORD Command;            /*message command */
  361.   APTR Data1;                /*2 LONGS for datas to send */
  362.   APTR Data2;
  363. };
  364.  
  365. /************************/
  366. /*   Message Commands   */
  367. /************************/
  368.  
  369. #define MCD_NOP        0    /*do nothing */
  370.  
  371. /* msgs from FileReq to ReadProcess */
  372.  
  373. #define MCD_READDIR    1    /* readin dir */
  374. #define MCD_SCAN    2    /* same as read, but continues a stopped reading proc */
  375. #define MCD_STOP    3    /* stop read in */
  376. #define MCD_QUIT    4    /* quit ReadProcess, set DO_AUTOREAD, if still reading */
  377.  
  378. /* msgs from ReadProcess to FileReq */
  379.  
  380. #define MCD_REDISPLAY    10    /* redisplay filelist (something changed) */
  381. #define MCD_SIZEPROP    11    /* change size of PropGadget (another file read in) */
  382. #define MCD_DONE    12    /* directroy totally read in */
  383.  
  384. #define MCD_ERROR    13    /* 13 is a great number for an error, is it ?? */
  385. #define MCD_EXIT    14    /* only send before ReadProcess is going down */
  386.                 /* cause FileReq is interested in me going down */
  387. #endif    /* MULTIREQ_PRIVATE */
  388.  
  389. #endif    /* LIBRARIES_MULTIREQ_H */
  390.